home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / exidy.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  51KB  |  1,433 lines

  1. /***************************************************************************
  2.  
  3. Exidy memory map
  4.  
  5. 0000-00FF R/W Zero Page RAM
  6. 0100-01FF R/W Stack RAM
  7. 0200-03FF R/W Scratchpad RAM
  8. 0800-3FFF  R  Program ROM              (Targ, Spectar only)
  9. 1A00       R  PX3 (Player 2 inputs)    (Fax only)
  10.               bit 4  D
  11.               bit 5  C
  12.               bit 6  B
  13.               bit 7  A
  14. 1C00       R  PX2 (Player 1 inputs)    (Fax only)
  15.               bit 0  2 player start
  16.               bit 1  1 player start
  17.               bit 4  D
  18.               bit 5  C
  19.               bit 6  B
  20.               bit 7  A
  21. 2000-3FFF  R  Banked question ROM      (Fax only)
  22. 4000-43FF R/W Screen RAM
  23. 4800-4FFF R/W Character Generator RAM (except Pepper II and Fax)
  24. 5000       W  Motion Object 1 Horizontal Position Latch (sprite 1 X)
  25. 5040       W  Motion Object 1 Vertical Position Latch   (sprite 1 Y)
  26. 5080       W  Motion Object 2 Horizontal Position Latch (sprite 2 X)
  27. 50C0       W  Motion Object 2 Vertical Position Latch   (sprite 2 Y)
  28. 5100       R  Option Dipswitch Port
  29.               bit 0  coin 2 (NOT inverted) (must activate together with $5103 bit 5)
  30.               bit 1-2  bonus
  31.               bit 3-4  coins per play
  32.               bit 5-6  lives
  33.               bit 7  US/UK coins
  34. 5100       W  Motion Objects Image Latch
  35.               Sprite number  bits 0-3 Sprite #1  4-7 Sprite #2
  36. 5101       R  Control Inputs Port
  37.               bit 0  start 1
  38.               bit 1  start 2
  39.               bit 2  right
  40.               bit 3  left
  41.               bit 5  up
  42.               bit 6  down
  43.               bit 7  coin 1 (must activate together with $5103 bit 6)
  44. 5101       W  Output Control Latch (not used in PEPPER II upright)
  45.               bit 7  Enable sprite #1
  46.               bit 6  Enable sprite #2
  47. 5103       R  Interrupt Condition Latch
  48.               bit 0  LNG0 - supposedly a language DIP switch
  49.               bit 1  LNG1 - supposedly a language DIP switch
  50.               bit 2  different for each game, but generally a collision bit
  51.               bit 3  TABLE - supposedly a cocktail table DIP switch
  52.               bit 4  different for each game, but generally a collision bit
  53.               bit 5  coin 2 (must activate together with $5100 bit 0)
  54.               bit 6  coin 1 (must activate together with $5101 bit 7)
  55.               bit 7  L256 - VBlank?
  56. 5213       R  IN2 (Mouse Trap)
  57.               bit 3  blue button
  58.               bit 2  free play
  59.               bit 1  red button
  60.               bit 0  yellow button
  61. 52XX      R/W Audio/Color Board Communications
  62. 6000-6FFF R/W Character Generator RAM (Pepper II, Fax only)
  63. 8000-FFF9  R  Program memory space
  64. FFFA-FFFF  R  Interrupt and Reset Vectors
  65.  
  66. Exidy Sound Board:
  67. 0000-07FF R/W RAM (mirrored every 0x7f)
  68. 0800-0FFF R/W 6532 Timer
  69. 1000-17FF R/W 6520 PIA
  70. 1800-1FFF R/W 8253 Timer
  71. 2000-27FF bit 0 Channel 1 Filter 1 enable
  72.           bit 1 Channel 1 Filter 2 enable
  73.           bit 2 Channel 2 Filter 1 enable
  74.           bit 3 Channel 2 Filter 2 enable
  75.           bit 4 Channel 3 Filter 1 enable
  76.           bit 5 Channel 3 Filter 2 enable
  77. 2800-2FFF 6840 Timer
  78. 3000      Bit 0..1 Noise select
  79. 3001      Bit 0..2 Channel 1 Amplitude
  80. 3002      Bit 0..2 Channel 2 Amplitude
  81. 3003      Bit 0..2 Channel 3 Amplitude
  82. 5800-7FFF ROM
  83.  
  84. Targ:
  85. 5200    Sound board control
  86.         bit 0 Music
  87.         bit 1 Shoot
  88.         bit 2 unused
  89.         bit 3 Swarn
  90.         bit 4 Sspec
  91.         bit 5 crash
  92.         bit 6 long
  93.         bit 7 game
  94.  
  95. 5201    Sound board control
  96.         bit 0 note
  97.         bit 1 upper
  98.  
  99. MouseTrap Digital Sound:
  100. 0000-3FFF ROM
  101.  
  102. IO:
  103.     A7 = 0: R Communication from sound processor
  104.     A6 = 0: R CVSD Clock State
  105.     A5 = 0: W Busy to sound processor
  106.     A4 = 0: W Data to CVSD
  107.  
  108. ***************************************************************************/
  109.  
  110. #include "driver.h"
  111. #include "vidhrdw/generic.h"
  112. #include "machine/6821pia.h"
  113.  
  114. /* also in machine/exidy.c */
  115. #define PALETTE_LEN 8
  116. #define COLORTABLE_LEN 20
  117.  
  118. /* These are defined in sndhrdw/exidy.c */
  119. WRITE_HANDLER( mtrap_voiceio_w );
  120. READ_HANDLER( mtrap_voiceio_r );
  121.  
  122. /* These are defined in sndhrdw/exidy.c */
  123. WRITE_HANDLER( exidy_shriot_w );
  124. READ_HANDLER( exidy_shriot_r );
  125.  
  126. WRITE_HANDLER( exidy_sfxctrl_w );
  127.  
  128. WRITE_HANDLER( exidy_sh8253_w );
  129. READ_HANDLER( exidy_sh8253_r );
  130.  
  131. READ_HANDLER( exidy_sh6840_r );
  132. WRITE_HANDLER( exidy_sh6840_w );
  133.  
  134. int exidy_sh_start(const struct MachineSound *msound);
  135. void exidy_sh_stop(void);
  136.  
  137. /* These are defined in vidhrdw/exidy.c */
  138.  
  139. int exidy_vh_start(void);
  140. void exidy_vh_stop(void);
  141. WRITE_HANDLER( exidy_characterram_w );
  142. void exidy_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  143. WRITE_HANDLER( exidy_color_w );
  144.  
  145. extern unsigned char *exidy_characterram;
  146. extern unsigned char *exidy_sprite_no;
  147. extern unsigned char *exidy_sprite_enable;
  148. extern unsigned char *exidy_sprite1_xpos;
  149. extern unsigned char *exidy_sprite1_ypos;
  150. extern unsigned char *exidy_sprite2_xpos;
  151. extern unsigned char *exidy_sprite2_ypos;
  152. extern unsigned char *exidy_color_latch;
  153.  
  154. extern int exidy_collision_counter;
  155.  
  156. /* These are defined in machine/exidy.c */
  157.  
  158. WRITE_HANDLER( fax_bank_select_w );
  159. READ_HANDLER( exidy_input_port_2_r );
  160. void exidy_init_machine(void);
  161. int venture_interrupt(void);
  162. int venture_shinterrupt(void);
  163.  
  164. void init_sidetrac(void);
  165. void init_targ(void);
  166. void init_spectar(void);
  167. void init_venture(void);
  168. void init_mtrap(void);
  169. void init_pepper2(void);
  170. void init_fax(void);
  171. void exidy_vh_init_palette(unsigned char *game_palette, unsigned short *game_colortable,const unsigned char *color_prom);
  172.  
  173. int exidy_interrupt(void);
  174.  
  175. extern unsigned char exidy_collision_mask;
  176.  
  177. /* These are defined in sndhrdw/targ.c */
  178. extern unsigned char targ_spec_flag;
  179. WRITE_HANDLER( targ_sh_w );
  180. int targ_sh_start(const struct MachineSound *msound);
  181. void targ_sh_stop(void);
  182.  
  183.  
  184.  
  185. static struct MemoryReadAddress readmem[] =
  186. {
  187.     { 0x0000, 0x03ff, MRA_RAM },
  188.     { 0x0800, 0x3fff, MRA_ROM }, /* Targ, Spectar only */
  189.     { 0x4000, 0x43ff, videoram_r },
  190.     { 0x4400, 0x47ff, videoram_r },    /* mirror (sidetrac requires this) */
  191.     { 0x4800, 0x4fff, MRA_RAM },
  192.     { 0x5100, 0x5100, input_port_0_r }, /* DSW */
  193.     { 0x5101, 0x5101, input_port_1_r }, /* IN0 */
  194.     { 0x5103, 0x5103, exidy_input_port_2_r }, /* IN1 */
  195.     { 0x5105, 0x5105, input_port_4_r }, /* IN3 - Targ, Spectar only */
  196.     { 0x5200, 0x520F, pia_0_r },
  197.     { 0x5213, 0x5213, input_port_3_r },     /* IN2 */
  198.     { 0x6000, 0x6fff, MRA_RAM }, /* Pepper II only */
  199.     { 0x8000, 0xffff, MRA_ROM },
  200.     { -1 }  /* end of table */
  201. };
  202.  
  203. static struct MemoryWriteAddress writemem[] =
  204. {
  205.     { 0x0000, 0x03ff, MWA_RAM },
  206.     { 0x0800, 0x3fff, MWA_ROM },
  207.     { 0x4000, 0x43ff, videoram_w, &videoram, &videoram_size },
  208.     { 0x4800, 0x4fff, exidy_characterram_w, &exidy_characterram },
  209.     { 0x5000, 0x5000, MWA_RAM, &exidy_sprite1_xpos },
  210.     { 0x5040, 0x5040, MWA_RAM, &exidy_sprite1_ypos },
  211.     { 0x5080, 0x5080, MWA_RAM, &exidy_sprite2_xpos },
  212.     { 0x50C0, 0x50C0, MWA_RAM, &exidy_sprite2_ypos },
  213.     { 0x5100, 0x5100, MWA_RAM, &exidy_sprite_no },
  214.     { 0x5101, 0x5101, MWA_RAM, &exidy_sprite_enable },
  215.     { 0x5200, 0x520F, pia_0_w },
  216.     { 0x5210, 0x5212, exidy_color_w, &exidy_color_latch },
  217.     { 0x8000, 0xffff, MWA_ROM },
  218.     { -1 }  /* end of table */
  219. };
  220.  
  221. static struct MemoryWriteAddress targ_writemem[] =
  222. {
  223.     { 0x0000, 0x03ff, MWA_RAM },
  224.     { 0x0800, 0x3fff, MWA_ROM },
  225.     { 0x4000, 0x43ff, videoram_w, &videoram, &videoram_size },
  226.     { 0x4800, 0x4fff, exidy_characterram_w, &exidy_characterram },
  227.     { 0x5000, 0x5000, MWA_RAM, &exidy_sprite1_xpos },
  228.     { 0x5040, 0x5040, MWA_RAM, &exidy_sprite1_ypos },
  229.     { 0x5080, 0x5080, MWA_RAM, &exidy_sprite2_xpos },
  230.     { 0x50C0, 0x50C0, MWA_RAM, &exidy_sprite2_ypos },
  231.     { 0x5100, 0x5100, MWA_RAM, &exidy_sprite_no },
  232.     { 0x5101, 0x5101, MWA_RAM, &exidy_sprite_enable },
  233.     { 0x5200, 0x5201, targ_sh_w },
  234.     { 0x8000, 0xffff, MWA_ROM },
  235.     { -1 }  /* end of table */
  236. };
  237.  
  238. static struct MemoryWriteAddress pepper2_writemem[] =
  239. {
  240.     { 0x0000, 0x03ff, MWA_RAM },
  241.     { 0x4000, 0x43ff, videoram_w, &videoram, &videoram_size },
  242.     { 0x5000, 0x5000, MWA_RAM, &exidy_sprite1_xpos },
  243.     { 0x5040, 0x5040, MWA_RAM, &exidy_sprite1_ypos },
  244.     { 0x5080, 0x5080, MWA_RAM, &exidy_sprite2_xpos },
  245.     { 0x50C0, 0x50C0, MWA_RAM, &exidy_sprite2_ypos },
  246.     { 0x5100, 0x5100, MWA_RAM, &exidy_sprite_no },
  247.     { 0x5101, 0x5101, MWA_RAM, &exidy_sprite_enable },
  248.     { 0x5200, 0x520F, pia_0_w },
  249.     { 0x5210, 0x5212, exidy_color_w, &exidy_color_latch },
  250.     { 0x5213, 0x5217, MWA_NOP }, /* empty control lines on color/sound board */
  251.     { 0x6000, 0x6fff, exidy_characterram_w, &exidy_characterram }, /* two 6116 character RAMs */
  252.     { 0x8000, 0xffff, MWA_ROM },
  253.     { -1 }  /* end of table */
  254. };
  255.  
  256. static struct MemoryReadAddress fax_readmem[] =
  257. {
  258.     { 0x0000, 0x03ff, MRA_RAM },
  259.     { 0x0400, 0x07ff, MRA_RAM }, /* Fax only */
  260.     { 0x1a00, 0x1a00, input_port_4_r }, /* IN3 - Fax only */
  261.     { 0x1c00, 0x1c00, input_port_3_r }, /* IN2 - Fax only */
  262.     { 0x2000, 0x3fff, MRA_BANK1 }, /* Fax only */
  263.     { 0x4000, 0x43ff, MRA_RAM },
  264.     { 0x5100, 0x5100, input_port_0_r }, /* DSW */
  265.     { 0x5101, 0x5101, input_port_1_r }, /* IN0 */
  266.     { 0x5103, 0x5103, exidy_input_port_2_r }, /* IN1 */
  267.     { 0x5200, 0x520F, pia_0_r },
  268.     { 0x5213, 0x5213, input_port_3_r },     /* IN2 */
  269.     { 0x6000, 0x6fff, MRA_RAM }, /* Fax, Pepper II only */
  270.     { 0x8000, 0xffff, MRA_ROM },
  271.     { -1 }  /* end of table */
  272. };
  273.  
  274. static struct MemoryWriteAddress fax_writemem[] =
  275. {
  276.     { 0x0000, 0x03ff, MWA_RAM },
  277.     { 0x0400, 0x07ff, MWA_RAM }, /* Fax only */
  278.     { 0x2000, 0x2000, fax_bank_select_w }, /* Fax only */
  279.     { 0x4000, 0x43ff, videoram_w, &videoram, &videoram_size },
  280.     { 0x5000, 0x5000, MWA_RAM, &exidy_sprite1_xpos },
  281.     { 0x5040, 0x5040, MWA_RAM, &exidy_sprite1_ypos },
  282.     { 0x5080, 0x5080, MWA_RAM, &exidy_sprite2_xpos },
  283.     { 0x50C0, 0x50C0, MWA_RAM, &exidy_sprite2_ypos },
  284.     { 0x5100, 0x5100, MWA_RAM, &exidy_sprite_no },
  285.     { 0x5101, 0x5101, MWA_RAM, &exidy_sprite_enable },
  286.     { 0x5200, 0x520F, pia_0_w },
  287.     { 0x5210, 0x5212, exidy_color_w, &exidy_color_latch },
  288.     { 0x5213, 0x5217, MWA_NOP }, /* empty control lines on color/sound board */
  289.     { 0x6000, 0x6fff, exidy_characterram_w, &exidy_characterram }, /* two 6116 character RAMs */
  290.     { 0x8000, 0xffff, MWA_ROM },
  291.     { -1 }  /* end of table */
  292. };
  293.  
  294. static struct MemoryReadAddress sound_readmem[] =
  295. {
  296.     { 0x0000, 0x07ff, MRA_RAM },
  297.     { 0x0800, 0x0FFF, exidy_shriot_r },
  298.     { 0x1000, 0x100F, pia_1_r },
  299.     { 0x1800, 0x1FFF, exidy_sh8253_r },
  300.     { 0x2000, 0x27FF, MRA_RAM },
  301.     { 0x2800, 0x2FFF, exidy_sh6840_r },
  302.     { 0x5800, 0x7fff, MRA_ROM },
  303.     { 0x8000, 0xf7ff, MRA_RAM },
  304.     { 0xf800, 0xffff, MRA_ROM },
  305.     { -1 }  /* end of table */
  306. };
  307.  
  308. static struct MemoryWriteAddress sound_writemem[] =
  309. {
  310.     { 0x0000, 0x07FF, MWA_RAM },
  311.     { 0x0800, 0x0FFF, exidy_shriot_w },
  312.     { 0x1000, 0x100F, pia_1_w },
  313.     { 0x1800, 0x1FFF, exidy_sh8253_w },
  314.     { 0x2000, 0x27FF, MWA_RAM },
  315.     { 0x2800, 0x2FFF, exidy_sh6840_w },
  316.     { 0x3000, 0x3700, exidy_sfxctrl_w },
  317.     { 0x5800, 0x7fff, MWA_ROM },
  318.     { 0x8000, 0xf7ff, MWA_RAM },
  319.     { 0xf800, 0xffff, MWA_ROM },
  320.     { -1 }  /* end of table */
  321. };
  322.  
  323. static struct MemoryWriteAddress dac_writemem[] =
  324. {
  325.         {0x0000,0x3fff, MWA_ROM },
  326.     { -1 } /* end of table */
  327. };
  328.  
  329. static struct MemoryReadAddress dac_readmem[] =
  330. {
  331.         {0x0000,0x3fff, MRA_ROM },
  332.         {0x4000,0xffff, MRA_ROM },
  333.     { -1 } /* end of table */
  334. };
  335.  
  336. static struct IOWritePort dac_iowrite[] =
  337. {
  338.         { 0x00, 0xFF, mtrap_voiceio_w },
  339.     { -1 }    /* end of table */
  340. };
  341.  
  342. static struct IOReadPort dac_ioread[] =
  343. {
  344.     { 0x00, 0xFF, mtrap_voiceio_r },
  345.     { -1 }
  346. };
  347.  
  348. /***************************************************************************
  349. Input Ports
  350. ***************************************************************************/
  351.  
  352. INPUT_PORTS_START( sidetrac )
  353.     PORT_START              /* DSW0 */
  354.     PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
  355.     PORT_DIPSETTING(    0x00, "2")
  356.     PORT_DIPSETTING(    0x01, "3")
  357.     PORT_DIPSETTING(    0x02, "4")
  358.     PORT_DIPSETTING(    0x03, "5")
  359.     PORT_DIPNAME( 0x0c, 0x04, DEF_STR( Coinage ) )
  360.     PORT_DIPSETTING(    0x08, DEF_STR( 2C_1C ) )
  361.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_1C ) )
  362.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_2C ) )
  363. /* 0x0c 2C_1C */
  364.     PORT_DIPNAME( 0x10, 0x10, "Top Score Award" )
  365.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  366.     PORT_DIPSETTING(    0x10, DEF_STR( On ) )
  367.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
  368.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
  369.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
  370.  
  371.     PORT_START      /* IN0 */
  372.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  373.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  374.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
  375.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
  376.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  377.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY )
  378.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY )
  379.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  380.  
  381.     PORT_START      /* IN1 */
  382.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
  383.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
  384.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
  385.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
  386.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
  387.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  388.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  389.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  390.  
  391.     PORT_START      /* IN2 */
  392.     PORT_BIT( 0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN )
  393.  
  394.     PORT_START      /* IN3 */
  395.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
  396.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
  397.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
  398.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
  399.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
  400.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  401.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  402.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  403. INPUT_PORTS_END
  404.  
  405. INPUT_PORTS_START( targ )
  406.     PORT_START              /* DSW0 */
  407.     PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) /* upright/cocktail switch? */
  408.     PORT_DIPNAME( 0x02, 0x00, "P Coinage" )
  409.     PORT_DIPSETTING(    0x00, "10P/1 C 50P Coin/6 Cs" )
  410.     PORT_DIPSETTING(    0x02, "2x10P/1 C 50P Coin/3 Cs" )
  411.     PORT_DIPNAME( 0x04, 0x00, "Top Score Award" )
  412.     PORT_DIPSETTING(    0x00, "Credit" )
  413.     PORT_DIPSETTING(    0x04, "Extended Play" )
  414.     PORT_DIPNAME( 0x18, 0x08, "Q Coinage" )
  415.     PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )
  416.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_1C ) )
  417.     PORT_DIPSETTING(    0x00, "1C/1C (no display)" )
  418.     PORT_DIPSETTING(    0x18, DEF_STR( 1C_2C ) )
  419.     PORT_DIPNAME( 0x60, 0x40, DEF_STR( Lives ) )
  420.     PORT_DIPSETTING(    0x60, "2" )
  421.     PORT_DIPSETTING(    0x40, "3" )
  422.     PORT_DIPSETTING(    0x20, "4" )
  423.     PORT_DIPSETTING(    0x00, "5" )
  424.     PORT_DIPNAME( 0x80, 0x80, "Currency" )
  425.     PORT_DIPSETTING(    0x80, "Quarters" )
  426.     PORT_DIPSETTING(    0x00, "Pence" )
  427.  
  428.     PORT_START      /* IN0 */
  429.     PORT_BIT( 0x7F, IP_ACTIVE_LOW, IPT_UNKNOWN )
  430.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  431.  
  432.     PORT_START      /* IN1 */
  433.     PORT_BIT( 0x1f, IP_ACTIVE_LOW, IPT_UNKNOWN )
  434.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
  435.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
  436.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  437.  
  438.     PORT_START      /* IN2 */
  439.     PORT_BIT( 0xFF, IP_ACTIVE_LOW, IPT_UNKNOWN )
  440.  
  441.     PORT_START      /* IN3 */
  442.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  443.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  444.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
  445.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
  446.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  447.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY )
  448.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY )
  449.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  450. INPUT_PORTS_END
  451.  
  452. /* identical to Targ, the only difference is the additional Language dip switch */
  453. INPUT_PORTS_START( spectar )
  454.     PORT_START              /* DSW0 */
  455.     PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_COIN2 ) /* upright/cocktail switch? */
  456.     PORT_DIPNAME( 0x02, 0x00, "P Coinage" )
  457.     PORT_DIPSETTING(    0x00, "10P/1 C 50P Coin/6 Cs" )
  458.     PORT_DIPSETTING(    0x02, "2x10P/1 C 50P Coin/3 Cs" )
  459.     PORT_DIPNAME( 0x04, 0x00, "Top Score Award" )
  460.     PORT_DIPSETTING(    0x00, "Credit" )
  461.     PORT_DIPSETTING(    0x04, "Extended Play" )
  462.     PORT_DIPNAME( 0x18, 0x08, "Q Coinage" )
  463.     PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) )
  464.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_1C ) )
  465.     PORT_DIPSETTING(    0x00, "1C/1C (no display)" )
  466.     PORT_DIPSETTING(    0x18, DEF_STR( 1C_2C ) )
  467.     PORT_DIPNAME( 0x60, 0x40, DEF_STR( Lives ) )
  468.     PORT_DIPSETTING(    0x60, "2" )
  469.     PORT_DIPSETTING(    0x40, "3" )
  470.     PORT_DIPSETTING(    0x20, "4" )
  471.     PORT_DIPSETTING(    0x00, "5" )
  472.     PORT_DIPNAME( 0x80, 0x80, "Currency" )
  473.     PORT_DIPSETTING(    0x80, "Quarters" )
  474.     PORT_DIPSETTING(    0x00, "Pence" )
  475.  
  476.     PORT_START      /* IN0 */
  477.     PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNKNOWN )
  478.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  479.  
  480.     PORT_START      /* IN1 */
  481.     PORT_DIPNAME( 0x03, 0x00, "Language" )
  482.     PORT_DIPSETTING(    0x00, "English" )
  483.     PORT_DIPSETTING(    0x01, "French" )
  484.     PORT_DIPSETTING(    0x02, "German" )
  485.     PORT_DIPSETTING(    0x03, "Spanish" )
  486.     PORT_BIT( 0x1c, IP_ACTIVE_LOW, IPT_UNKNOWN )
  487.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
  488.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
  489.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  490.  
  491.     PORT_START      /* IN2 */
  492.     PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
  493.  
  494.     PORT_START      /* IN3 */
  495.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  496.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  497.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
  498.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
  499.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  500.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY )
  501.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY )
  502.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  503. INPUT_PORTS_END
  504.  
  505. INPUT_PORTS_START( mtrap )
  506.     PORT_START      /* DSW0 */
  507.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
  508.     PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) )
  509.     PORT_DIPSETTING(    0x06, "30000" )
  510.     PORT_DIPSETTING(    0x04, "40000" )
  511.     PORT_DIPSETTING(    0x02, "50000" )
  512.     PORT_DIPSETTING(    0x00, "60000" )
  513.     PORT_DIPNAME( 0x98, 0x98, DEF_STR( Coinage ) )
  514.     PORT_DIPSETTING(    0x90, DEF_STR( 2C_1C ) )
  515.     PORT_DIPSETTING(    0x00, "Coin A 2C/1C Coin B 1C/3C" )
  516.     PORT_DIPSETTING(    0x98, DEF_STR( 1C_1C ) )
  517.     PORT_DIPSETTING(    0x10, "Coin A 1C/1C Coin B 1C/4C" )
  518.     PORT_DIPSETTING(    0x18, "Coin A 1C/1C Coin B 1C/5C" )
  519.     PORT_DIPSETTING(    0x88, DEF_STR( 1C_2C ) )
  520.     PORT_DIPSETTING(    0x08, "Coin A 1C/3C Coin B 2C/7C" )
  521.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_4C ) )
  522.     PORT_DIPNAME( 0x60, 0x40, DEF_STR( Lives ) )
  523.     PORT_DIPSETTING(    0x60, "2" )
  524.     PORT_DIPSETTING(    0x40, "3" )
  525.     PORT_DIPSETTING(    0x20, "4" )
  526.     PORT_DIPSETTING(    0x00, "5" )
  527.  
  528.     PORT_START      /* IN0 */
  529.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  530.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  531.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
  532.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
  533.     PORT_BITX(0x10, IP_ACTIVE_LOW, IPT_BUTTON1, "Dog Button", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
  534.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY )
  535.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY )
  536.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  537.  
  538.     PORT_START      /* IN1 */
  539. /*
  540.     The schematics claim these exist, but there's nothing in
  541.     the ROMs to support that claim (as far as I can see):
  542.  
  543.     PORT_DIPNAME( 0x03, 0x00, "Language" )
  544.     PORT_DIPSETTING(    0x00, "English" )
  545.     PORT_DIPSETTING(    0x01, "French" )
  546.     PORT_DIPSETTING(    0x02, "German" )
  547.     PORT_DIPSETTING(    0x03, "Spanish" )
  548.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
  549.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  550.     PORT_DIPSETTING(    0x08, DEF_STR( Cocktail ) )
  551. */
  552.  
  553.     PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  554.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
  555.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
  556.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  557.  
  558.     PORT_START              /* IN2 */
  559.     PORT_BITX(0x01, IP_ACTIVE_LOW, IPT_BUTTON2, "Yellow Button", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
  560.     PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_BUTTON3, "Red Button", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
  561.     PORT_BITX(0x04, 0x04, IPT_DIPSWITCH_NAME, DEF_STR( Free_Play ), IP_KEY_NONE, IP_JOY_NONE )
  562.     PORT_DIPSETTING(0x04, DEF_STR( Off ) )
  563.     PORT_DIPSETTING(0x00, DEF_STR( On ) )
  564.     PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_BUTTON4, "Blue Button", IP_KEY_DEFAULT, IP_JOY_DEFAULT )
  565.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
  566.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  567.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  568.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  569. INPUT_PORTS_END
  570.  
  571. INPUT_PORTS_START( venture )
  572.     PORT_START      /* DSW0 */
  573.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
  574.     PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) )
  575.     PORT_DIPSETTING(    0x06, "20000" )
  576.     PORT_DIPSETTING(    0x04, "30000" )
  577.     PORT_DIPSETTING(    0x02, "40000" )
  578.     PORT_DIPSETTING(    0x00, "50000" )
  579.     PORT_DIPNAME( 0x98, 0x80, DEF_STR( Coinage ) )
  580.     PORT_DIPSETTING(    0x88, DEF_STR( 2C_1C ) )
  581.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_1C ) )
  582.     PORT_DIPSETTING(    0x98, DEF_STR( 1C_2C ) )
  583.     PORT_DIPSETTING(    0x00, "Pence: A 2C/1C B 1C/3C" )
  584.     PORT_DIPSETTING(    0x18, "Pence: A 1C/1C B 1C/6C" )
  585.     /*0x10 same as 0x00 */
  586.     /*0x90 same as 0x80 */
  587.     PORT_DIPNAME( 0x60, 0x20, DEF_STR( Lives ) )
  588.     PORT_DIPSETTING(    0x00, "2" )
  589.     PORT_DIPSETTING(    0x20, "3" )
  590.     PORT_DIPSETTING(    0x40, "4" )
  591.     PORT_DIPSETTING(    0x60, "5" )
  592.  
  593.     PORT_START      /* IN0 */
  594.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  595.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  596.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  597.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
  598.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  599.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
  600.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
  601.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  602.  
  603.     PORT_START      /* IN1 */
  604. /*
  605.     The schematics claim these exist, but there's nothing in
  606.     the ROMs to support that claim (as far as I can see):
  607.  
  608.     PORT_DIPNAME( 0x03, 0x00, "Language" )
  609.     PORT_DIPSETTING(    0x00, "English" )
  610.     PORT_DIPSETTING(    0x01, "French" )
  611.     PORT_DIPSETTING(    0x02, "German" )
  612.     PORT_DIPSETTING(    0x03, "Spanish" )
  613.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
  614.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  615.     PORT_DIPSETTING(    0x08, DEF_STR( Cocktail ) )
  616. */
  617.  
  618.     PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  619.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
  620.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
  621.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  622. INPUT_PORTS_END
  623.  
  624. INPUT_PORTS_START( pepper2 )
  625.     PORT_START              /* DSW */
  626.     PORT_BIT ( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
  627.     PORT_DIPNAME( 0x06, 0x06, DEF_STR( Bonus_Life ) )
  628.     PORT_DIPSETTING(    0x06, "40000" )
  629.     PORT_DIPSETTING(    0x04, "50000" )
  630.     PORT_DIPSETTING(    0x02, "60000" )
  631.     PORT_DIPSETTING(    0x00, "70000" )
  632.     PORT_DIPNAME( 0x60, 0x60, DEF_STR( Lives ) )
  633.     PORT_DIPSETTING(    0x60, "2" )
  634.     PORT_DIPSETTING(    0x40, "3" )
  635.     PORT_DIPSETTING(    0x20, "4" )
  636.     PORT_DIPSETTING(    0x00, "5" )
  637.     PORT_DIPNAME( 0x98, 0x98, DEF_STR( Coinage ) )
  638.     PORT_DIPSETTING(    0x90, DEF_STR( 2C_1C ) )
  639.     PORT_DIPSETTING(    0x00, "Coin A 2C/1C Coin B 1C/3C" )
  640.     PORT_DIPSETTING(    0x98, DEF_STR( 1C_1C ) )
  641.     PORT_DIPSETTING(    0x10, "Coin A 1C/1C Coin B 1C/4C" )
  642.     PORT_DIPSETTING(    0x18, "Coin A 1C/1C Coin B 1C/5C" )
  643.     PORT_DIPSETTING(    0x88, DEF_STR( 1C_2C ) )
  644.     PORT_DIPSETTING(    0x08, "1 Coin/3 Credits 2C/7C" )
  645.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_4C ) )
  646.  
  647.     PORT_START              /* IN0 */
  648.     PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  649.     PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  650.     PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY )
  651.     PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_4WAY )
  652.     PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  653.     PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_4WAY )
  654.     PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_4WAY )
  655.     PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  656.  
  657.     PORT_START      /* IN1 */
  658. /*
  659.     The schematics claim these exist, but there's nothing in
  660.     the ROMs to support that claim (as far as I can see):
  661.  
  662.     PORT_DIPNAME( 0x03, 0x00, "Language" )
  663.     PORT_DIPSETTING(    0x00, "English" )
  664.     PORT_DIPSETTING(    0x01, "French" )
  665.     PORT_DIPSETTING(    0x02, "German" )
  666.     PORT_DIPSETTING(    0x03, "Spanish" )
  667.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
  668.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  669.     PORT_DIPSETTING(    0x08, DEF_STR( Cocktail ) )
  670. */
  671.  
  672.     PORT_BIT( 0x1F, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  673.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
  674.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
  675.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  676. INPUT_PORTS_END
  677.  
  678. INPUT_PORTS_START( fax )
  679.     PORT_START              /* DSW */
  680.     PORT_BIT ( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
  681.     PORT_DIPNAME( 0x06, 0x06, "Bonus Time" )
  682.     PORT_DIPSETTING(    0x06, "8000" )
  683.     PORT_DIPSETTING(    0x04, "13000" )
  684.     PORT_DIPSETTING(    0x02, "18000" )
  685.     PORT_DIPSETTING(    0x00, "25000" )
  686.     PORT_DIPNAME( 0x60, 0x60, "Game/Bonus Times" )
  687.     PORT_DIPSETTING(    0x60, ":32/:24" )
  688.     PORT_DIPSETTING(    0x40, ":48/:36" )
  689.     PORT_DIPSETTING(    0x20, "1:04/:48" )
  690.     PORT_DIPSETTING(    0x00, "1:12/1:04" )
  691.     PORT_DIPNAME( 0x98, 0x98, DEF_STR( Coinage ) )
  692.     PORT_DIPSETTING(    0x90, DEF_STR( 2C_1C ) )
  693.     PORT_DIPSETTING(    0x00, "Coin A 2C/1C Coin B 1C/3C" )
  694.     PORT_DIPSETTING(    0x98, DEF_STR( 1C_1C ) )
  695.     PORT_DIPSETTING(    0x10, "Coin A 1C/1C Coin B 1C/4C" )
  696.     PORT_DIPSETTING(    0x18, "Coin A 1C/1C Coin B 1C/5C" )
  697.     PORT_DIPSETTING(    0x88, DEF_STR( 1C_2C ) )
  698.     PORT_DIPSETTING(    0x08, "1 Coin/3 Credits 2C/7C" )
  699.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_4C ) )
  700.  
  701.     PORT_START              /* IN0 */
  702.     PORT_BIT ( 0x7f, IP_ACTIVE_HIGH, IPT_UNUSED )
  703.     PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  704.  
  705.     PORT_START      /* IN1 */
  706. /*
  707.     The schematics claim these exist, but there's nothing in
  708.     the ROMs to support that claim (as far as I can see):
  709.  
  710.     PORT_DIPNAME( 0x03, 0x00, "Language" )
  711.     PORT_DIPSETTING(    0x00, "English" )
  712.     PORT_DIPSETTING(    0x01, "French" )
  713.     PORT_DIPSETTING(    0x02, "German" )
  714.     PORT_DIPSETTING(    0x03, "Spanish" )
  715.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
  716.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  717.     PORT_DIPSETTING(    0x08, DEF_STR( Cocktail ) )
  718. */
  719.  
  720.     PORT_BIT( 0x1b, IP_ACTIVE_HIGH, IPT_UNUSED )
  721.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* Set when motion object 1 is drawn? */
  722.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
  723.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
  724.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )   /* VBlank */
  725.  
  726.     PORT_START /* IN2 */
  727.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
  728.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
  729.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
  730.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
  731.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 )
  732.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 )
  733.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
  734.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
  735.  
  736.     PORT_START /* IN3 */
  737.     PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
  738.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER2 )
  739.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
  740.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  741.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  742.  
  743. INPUT_PORTS_END
  744.  
  745.  
  746. /***************************************************************************
  747. Graphics Layout
  748. ***************************************************************************/
  749.  
  750. static struct GfxLayout charlayout =
  751. {
  752.     8,8,    /* 8*8 characters */
  753.     256,    /* 256 characters */
  754.     1,      /* 1 bits per pixel */
  755.     { 0 }, /* No info needed for bit offsets */
  756.     { 0, 1, 2, 3, 4, 5, 6, 7 },
  757.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  758.     8*8 /* every char takes 8 consecutive bytes */
  759. };
  760.  
  761. /* Pepper II and Fax used a special Plane Generation Board for 2-bit graphics */
  762.  
  763. static struct GfxLayout pepper2_charlayout =
  764. {
  765.     8,8,    /* 8*8 characters */
  766.     256,    /* 256 characters */
  767.     2,      /* 2 bits per pixel */
  768.     { 0, 256*8*8 }, /* 2 bits separated by 0x0800 bytes */
  769.     { 0, 1, 2, 3, 4, 5, 6, 7 },
  770.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  771.     8*8 /* every char takes 8 consecutive bytes */
  772. };
  773.  
  774.  
  775. static struct GfxLayout spritelayout =
  776. {
  777.     16,16,  /* 16*16 sprites */
  778.     16*4,   /* 64 characters */
  779.     1,      /* 1 bit per pixel */
  780.     { 0 },
  781.     { 0, 1, 2, 3, 4, 5, 6, 7, 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7},
  782.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8},
  783.     8*32    /* every char takes 32 consecutive bytes */
  784. };
  785.  
  786. static struct GfxLayout targ_spritelayout =
  787. {
  788.     16,16,  /* 16*16 sprites */
  789.     16*2,   /* 32 characters for Targ/Spectar */
  790.     1,      /* 1 bit per pixel */
  791.     { 0 },
  792.     { 0, 1, 2, 3, 4, 5, 6, 7, 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7},
  793.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8},
  794.     8*32    /* every char takes 32 consecutive bytes */
  795. };
  796.  
  797.  
  798. static struct GfxDecodeInfo gfxdecodeinfo[] =
  799. {
  800.     { 0,           0x4800, &charlayout,       0, 4 },         /* the game dynamically modifies this */
  801.     { REGION_GFX1, 0x0000, &spritelayout, 8, 2 },  /* Sprites */
  802.     { -1 } /* end of array */
  803. };
  804.  
  805. static struct GfxDecodeInfo pepper2_gfxdecodeinfo[] =
  806. {
  807.     { 0,           0x6000, &pepper2_charlayout,       0, 4 },    /* the game dynamically modifies this */
  808.     { REGION_GFX1, 0x0000, &spritelayout, 16, 2 },  /* Angel/Devil/Zipper Ripper */
  809.     { -1 } /* end of array */
  810. };
  811.  
  812. static struct GfxDecodeInfo targ_gfxdecodeinfo[] =
  813. {
  814.     { 0,           0x4800, &charlayout,       0, 4 },         /* the game dynamically modifies this */
  815.     { REGION_GFX1, 0x0000, &targ_spritelayout, 8, 2 },  /* Sprites */
  816.     { -1 } /* end of array */
  817. };
  818.  
  819.  
  820.  
  821. /***************************************************************************
  822.   Game drivers
  823. ***************************************************************************/
  824.  
  825. static const char *targ_sample_names[] =
  826. {
  827.     "*targ",
  828.     "expl.wav",
  829.     "shot.wav",
  830.     "sexpl.wav",
  831.     "spslow.wav",
  832.     "spfast.wav",
  833.     0       /* end of array */
  834. };
  835.  
  836. static struct Samplesinterface targ_samples_interface =
  837. {
  838.     3,    /* 3 Channels */
  839.     25,    /* volume */
  840.     targ_sample_names
  841. };
  842.  
  843. static struct CustomSound_interface targ_custom_interface =
  844. {
  845.     targ_sh_start,
  846.     targ_sh_stop,
  847.     0
  848. };
  849.  
  850. static struct DACinterface targ_DAC_interface =
  851. {
  852.     1,
  853.     { 100 }
  854. };
  855.  
  856.  
  857.  
  858. static struct MachineDriver machine_driver_targ =
  859. {
  860.     /* basic machine hardware */
  861.     {
  862.         {
  863.             CPU_M6502,
  864.             11289000/16,    /* .705562 MHz */
  865.             readmem,targ_writemem,0,0,
  866.             exidy_interrupt,1
  867.         },
  868.     },
  869.     57, DEFAULT_60HZ_VBLANK_DURATION,       /* frames per second, vblank duration */
  870.     1,
  871.     exidy_init_machine,
  872.  
  873.     /* video hardware */
  874.     32*8, 32*8, { 0*8, 31*8-1, 0*8, 32*8-1 },
  875.     targ_gfxdecodeinfo,
  876.     PALETTE_LEN, COLORTABLE_LEN,
  877.     exidy_vh_init_palette,
  878.  
  879.     VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY,
  880.     0,
  881.     exidy_vh_start,
  882.     exidy_vh_stop,
  883.     exidy_vh_screenrefresh,
  884.  
  885.     /* sound hardware */
  886.     0,0,0,0,
  887.     {
  888.         {
  889.             SOUND_CUSTOM,
  890.             &targ_custom_interface
  891.         },
  892.         {
  893.             SOUND_SAMPLES,
  894.             &targ_samples_interface
  895.         },
  896.         {
  897.             SOUND_DAC,
  898.             &targ_DAC_interface
  899.         }
  900.     }
  901. };
  902.  
  903. static struct hc55516_interface cvsd_interface =
  904. {
  905.     1,          /* 1 chip */
  906.         { 80 }
  907. };
  908.  
  909. static struct Samplesinterface venture_samples_interface=
  910. {
  911.     6,       /* 6 Channels */
  912.     20  /* volume */
  913. };
  914.  
  915. static struct CustomSound_interface exidy_custom_interface =
  916. {
  917.     exidy_sh_start,
  918.     exidy_sh_stop,
  919.     0
  920. };
  921.  
  922. static struct MachineDriver machine_driver_mtrap =
  923. {
  924.     /* basic machine hardware */
  925.     {
  926.         {
  927.             CPU_M6502,
  928.             11289000/16,
  929.             readmem,writemem,0,0,
  930.             exidy_interrupt,1
  931.         },
  932.         {
  933.             CPU_M6502 | CPU_AUDIO_CPU,
  934.             3579545/4,
  935.             sound_readmem,sound_writemem,0,0,
  936.             ignore_interrupt,0
  937.         },
  938.         {
  939.             CPU_Z80 | CPU_AUDIO_CPU,
  940.             3579545/2,
  941.             dac_readmem,dac_writemem,dac_ioread,dac_iowrite,
  942.             ignore_interrupt,0
  943.         }
  944.     },
  945.     57, DEFAULT_60HZ_VBLANK_DURATION,       /* frames per second, vblank duration */
  946.     32, /* 10 CPU slices per frame - enough for the sound CPU to read all commands */
  947.     exidy_init_machine,
  948.  
  949.     /* video hardware */
  950.     32*8, 32*8, { 0*8, 31*8-1, 0*8, 32*8-1 },
  951.     gfxdecodeinfo,
  952.     PALETTE_LEN, COLORTABLE_LEN,
  953.     exidy_vh_init_palette,
  954.  
  955.     VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY|VIDEO_MODIFIES_PALETTE,
  956.     0,
  957.     exidy_vh_start,
  958.     exidy_vh_stop,
  959.     exidy_vh_screenrefresh,
  960.  
  961.     /* sound hardware */
  962.     0,0,0,0,
  963.     {
  964.         {
  965.             SOUND_HC55516,
  966.             &cvsd_interface
  967.         },
  968.         {
  969.             SOUND_SAMPLES,
  970.             &venture_samples_interface
  971.         },
  972.         {
  973.             SOUND_CUSTOM,
  974.             &exidy_custom_interface
  975.         }
  976.     }
  977.  
  978.  
  979. };
  980.  
  981.  
  982. static struct MachineDriver machine_driver_venture =
  983. {
  984.     /* basic machine hardware */
  985.     {
  986.         {
  987.             CPU_M6502,
  988.             11289000/16,
  989.             readmem,writemem,0,0,
  990.             venture_interrupt,32 /* Need to have multiple IRQs per frame if there's a collision */
  991.         },
  992.         {
  993.             CPU_M6502 | CPU_AUDIO_CPU,
  994.             3579545/4,
  995.             sound_readmem,sound_writemem,0,0,
  996.             ignore_interrupt,0
  997.         }
  998.     },
  999.     57, DEFAULT_60HZ_VBLANK_DURATION,       /* frames per second, vblank duration */
  1000.     10, /* 10 CPU slices per frame - enough for the sound CPU to read all commands */
  1001.     exidy_init_machine,
  1002.  
  1003.     /* video hardware */
  1004.     32*8, 32*8, { 0*8, 31*8-1, 0*8, 32*8-1 },
  1005.     gfxdecodeinfo,
  1006.     PALETTE_LEN, COLORTABLE_LEN,
  1007.     exidy_vh_init_palette,
  1008.  
  1009.     VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY|VIDEO_MODIFIES_PALETTE,
  1010.     0,
  1011.     exidy_vh_start,
  1012.     exidy_vh_stop,
  1013.     exidy_vh_screenrefresh,
  1014.  
  1015.     /* sound hardware */
  1016.     0,0,0,0,
  1017.     {
  1018.         {
  1019.             SOUND_SAMPLES,
  1020.             &venture_samples_interface
  1021.         },
  1022.         {
  1023.             SOUND_CUSTOM,
  1024.             &exidy_custom_interface
  1025.         }
  1026.     }
  1027. };
  1028.  
  1029.  
  1030. static struct MachineDriver machine_driver_pepper2 =
  1031. {
  1032.     /* basic machine hardware */
  1033.     {
  1034.         {
  1035.             CPU_M6502,
  1036.             11289000/16,
  1037.             readmem,pepper2_writemem,0,0,
  1038.             exidy_interrupt,1
  1039.         },
  1040.         {
  1041.             CPU_M6502 | CPU_AUDIO_CPU,
  1042.             3579545/4,
  1043.             sound_readmem,sound_writemem,0,0,
  1044.             ignore_interrupt,0
  1045.         }
  1046.     },
  1047.     57, DEFAULT_60HZ_VBLANK_DURATION,       /* frames per second, vblank duration */
  1048.     10, /* 10 CPU slices per frame - enough for the sound CPU to read all commands */
  1049.     exidy_init_machine,
  1050.  
  1051.     /* video hardware */
  1052.     32*8, 32*8, { 0*8, 31*8-1, 0*8, 32*8-1 },
  1053.     pepper2_gfxdecodeinfo,
  1054.     PALETTE_LEN, COLORTABLE_LEN,
  1055.     exidy_vh_init_palette,
  1056.  
  1057.     VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY|VIDEO_MODIFIES_PALETTE,
  1058.     0,
  1059.     exidy_vh_start,
  1060.     exidy_vh_stop,
  1061.     exidy_vh_screenrefresh,
  1062.  
  1063.     /* sound hardware */
  1064.     0,0,0,0,
  1065.     {
  1066.         {
  1067.             SOUND_SAMPLES,
  1068.             &venture_samples_interface
  1069.         },
  1070.         {
  1071.             SOUND_CUSTOM,
  1072.             &exidy_custom_interface
  1073.         }
  1074.     }
  1075.  
  1076. };
  1077.  
  1078.  
  1079. static struct MachineDriver machine_driver_fax =
  1080. {
  1081.     /* basic machine hardware */
  1082.     {
  1083.         {
  1084.             CPU_M6502,
  1085.             11289000/16,
  1086.             fax_readmem,fax_writemem,0,0,
  1087.             exidy_interrupt,1
  1088.         },
  1089.         {
  1090.             CPU_M6502 | CPU_AUDIO_CPU,
  1091.             3579545/4,
  1092.             sound_readmem,sound_writemem,0,0,
  1093.             ignore_interrupt,0
  1094.         }
  1095.     },
  1096.     57, DEFAULT_60HZ_VBLANK_DURATION,       /* frames per second, vblank duration */
  1097.     10, /* 10 CPU slices per frame - enough for the sound CPU to read all commands */
  1098.     exidy_init_machine,
  1099.  
  1100.     /* video hardware */
  1101.     32*8, 32*8, { 0*8, 31*8-1, 0*8, 32*8-1 },
  1102.     pepper2_gfxdecodeinfo,
  1103.     PALETTE_LEN, COLORTABLE_LEN,
  1104.     exidy_vh_init_palette,
  1105.  
  1106.     VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY|VIDEO_MODIFIES_PALETTE,
  1107.     0,
  1108.     exidy_vh_start,
  1109.     exidy_vh_stop,
  1110.     exidy_vh_screenrefresh,
  1111.  
  1112.     /* sound hardware */
  1113.     0,0,0,0,
  1114.     {
  1115.         {
  1116.             SOUND_SAMPLES,
  1117.             &venture_samples_interface
  1118.         },
  1119.         {
  1120.             SOUND_CUSTOM,
  1121.             &exidy_custom_interface
  1122.         }
  1123.     }
  1124. };
  1125.  
  1126.  
  1127. /***************************************************************************
  1128.   Game ROMs
  1129. ***************************************************************************/
  1130.  
  1131. ROM_START( sidetrac )
  1132.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1133.     ROM_LOAD( "stl8a-1",     0x2800, 0x0800, 0xe41750ff )
  1134.     ROM_LOAD( "stl7a-2",     0x3000, 0x0800, 0x57fb28dc )
  1135.     ROM_LOAD( "stl6a-2",     0x3800, 0x0800, 0x4226d469 )
  1136.     ROM_RELOAD(              0xf800, 0x0800 ) /* for the reset/interrupt vectors */
  1137.     ROM_LOAD( "stl9c-1",     0x4800, 0x0400, 0x08710a84 ) /* prom instead of ram chr gen*/
  1138.  
  1139.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1140.     ROM_LOAD( "stl11d",      0x0000, 0x0200, 0x3bd1acc1 )
  1141. ROM_END
  1142.  
  1143. ROM_START( targ )
  1144.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1145.     ROM_LOAD( "targ10a1",    0x1800, 0x0800, 0x969744e1 )
  1146.     ROM_LOAD( "targ09a1",    0x2000, 0x0800, 0xa177a72d )
  1147.     ROM_LOAD( "targ08a1",    0x2800, 0x0800, 0x6e6928a5 )
  1148.     ROM_LOAD( "targ07a4",    0x3000, 0x0800, 0xe2f37f93 )
  1149.     ROM_LOAD( "targ06a3",    0x3800, 0x0800, 0xa60a1bfc )
  1150.     ROM_RELOAD(              0xf800, 0x0800 ) /* for the reset/interrupt vectors */
  1151.  
  1152.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1153.     ROM_LOAD( "targ11d1",    0x0000, 0x0400, 0x9f03513e )
  1154. ROM_END
  1155.  
  1156. ROM_START( spectar )
  1157.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1158.     ROM_LOAD( "spl11a-3",    0x1000, 0x0800, 0x08880aff )
  1159.     ROM_LOAD( "spl10a-2",    0x1800, 0x0800, 0xfca667c1 )
  1160.     ROM_LOAD( "spl9a-3",     0x2000, 0x0800, 0x9d4ce8ba )
  1161.     ROM_LOAD( "spl8a-2",     0x2800, 0x0800, 0xcfacbadf )
  1162.     ROM_LOAD( "spl7a-2",     0x3000, 0x0800, 0x4c4741ff )
  1163.     ROM_LOAD( "spl6a-2",     0x3800, 0x0800, 0x0cb46b25 )
  1164.     ROM_RELOAD(              0xf800, 0x0800 )  /* for the reset/interrupt vectors */
  1165.  
  1166.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1167.     ROM_LOAD( "hrl11d-2",    0x0000, 0x0400, 0xc55b645d )  /* this is actually not used (all FF) */
  1168.     ROM_CONTINUE(            0x0000, 0x0400 )  /* overwrite with the real one */
  1169. ROM_END
  1170.  
  1171. ROM_START( spectar1 )
  1172.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1173.     ROM_LOAD( "spl12a1",     0x0800, 0x0800, 0x7002efb4 )
  1174.     ROM_LOAD( "spl11a1",     0x1000, 0x0800, 0x8eb8526a )
  1175.     ROM_LOAD( "spl10a1",     0x1800, 0x0800, 0x9d169b3d )
  1176.     ROM_LOAD( "spl9a1",      0x2000, 0x0800, 0x40e3eba1 )
  1177.     ROM_LOAD( "spl8a1",      0x2800, 0x0800, 0x64d8eb84 )
  1178.     ROM_LOAD( "spl7a1",      0x3000, 0x0800, 0xe08b0d8d )
  1179.     ROM_LOAD( "spl6a1",      0x3800, 0x0800, 0xf0e4e71a )
  1180.     ROM_RELOAD(              0xf800, 0x0800 )   /* for the reset/interrupt vectors */
  1181.  
  1182.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1183.     ROM_LOAD( "hrl11d-2",    0x0000, 0x0400, 0xc55b645d )  /* this is actually not used (all FF) */
  1184.     ROM_CONTINUE(            0x0000, 0x0400 )  /* overwrite with the real one */
  1185. ROM_END
  1186.  
  1187. ROM_START( mtrap )
  1188.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1189.     ROM_LOAD( "mtl11a.bin",  0xa000, 0x1000, 0xbd6c3eb5 )
  1190.     ROM_LOAD( "mtl10a.bin",  0xb000, 0x1000, 0x75b0593e )
  1191.     ROM_LOAD( "mtl9a.bin",   0xc000, 0x1000, 0x28dd20ff )
  1192.     ROM_LOAD( "mtl8a.bin",   0xd000, 0x1000, 0xcc09f7a4 )
  1193.     ROM_LOAD( "mtl7a.bin",   0xe000, 0x1000, 0xcaafbb6d )
  1194.     ROM_LOAD( "mtl6a.bin",   0xf000, 0x1000, 0xd85e52ca )
  1195.  
  1196.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1197.     ROM_LOAD( "mta5a.bin",   0x6800, 0x0800, 0xdbe4ec02 )
  1198.     ROM_LOAD( "mta6a.bin",   0x7000, 0x0800, 0xc00f0c05 )
  1199.     ROM_LOAD( "mta7a.bin",   0x7800, 0x0800, 0xf3f16ca7 )
  1200.     ROM_RELOAD(              0xf800, 0x0800 )
  1201.  
  1202.     ROM_REGION( 0x10000, REGION_CPU3 ) /* 64k for digital sound processor */
  1203.     ROM_LOAD( "mta2a.bin", 0x0000,0x1000,0x13db8ed3 )
  1204.     ROM_LOAD( "mta3a.bin", 0x1000,0x1000,0x31bdfe5c )
  1205.     ROM_LOAD( "mta4a.bin", 0x2000,0x1000,0x1502d0e8 )
  1206.     ROM_LOAD( "mta1a.bin", 0x3000,0x1000,0x658482a6 )
  1207.  
  1208.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1209.     ROM_LOAD( "mtl11d.bin",  0x0000, 0x0800, 0xc6e4d339 )
  1210. ROM_END
  1211.  
  1212. ROM_START( mtrap3 )
  1213.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1214.     ROM_LOAD( "mtl-3.11a",   0xa000, 0x1000, 0x4091be6e )
  1215.     ROM_LOAD( "mtl-3.10a",   0xb000, 0x1000, 0x38250c2f )
  1216.     ROM_LOAD( "mtl-3.9a",    0xc000, 0x1000, 0x2eec988e )
  1217.     ROM_LOAD( "mtl-3.8a",    0xd000, 0x1000, 0x744b4b1c )
  1218.     ROM_LOAD( "mtl-3.7a",    0xe000, 0x1000, 0xea8ec479 )
  1219.     ROM_LOAD( "mtl-3.6a",    0xf000, 0x1000, 0xd72ba72d )
  1220.  
  1221.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1222.     ROM_LOAD( "mta5a.bin",   0x6800, 0x0800, 0xdbe4ec02 )
  1223.     ROM_LOAD( "mta6a.bin",   0x7000, 0x0800, 0xc00f0c05 )
  1224.     ROM_LOAD( "mta7a.bin",   0x7800, 0x0800, 0xf3f16ca7 )
  1225.     ROM_RELOAD(              0xf800, 0x0800 )
  1226.  
  1227.     ROM_REGION( 0x10000, REGION_CPU3 ) /* 64k for digital sound processor */
  1228.     ROM_LOAD( "mta2a.bin", 0x0000,0x1000,0x13db8ed3 )
  1229.     ROM_LOAD( "mta3a.bin", 0x1000,0x1000,0x31bdfe5c )
  1230.     ROM_LOAD( "mta4a.bin", 0x2000,0x1000,0x1502d0e8 )
  1231.     ROM_LOAD( "mta1a.bin", 0x3000,0x1000,0x658482a6 )
  1232.  
  1233.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1234.     ROM_LOAD( "mtl11d.bin",  0x0000, 0x0800, 0xc6e4d339 )
  1235. ROM_END
  1236.  
  1237. ROM_START( mtrap4 )
  1238.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1239.     ROM_LOAD( "mta411a.bin",  0xa000, 0x1000, 0x2879cb8d )
  1240.     ROM_LOAD( "mta410a.bin",  0xb000, 0x1000, 0xd7378af9 )
  1241.     ROM_LOAD( "mta49.bin",    0xc000, 0x1000, 0xbe667e64 )
  1242.     ROM_LOAD( "mta48a.bin",   0xd000, 0x1000, 0xde0442f8 )
  1243.     ROM_LOAD( "mta47a.bin",   0xe000, 0x1000, 0xcdf8c6a8 )
  1244.     ROM_LOAD( "mta46a.bin",   0xf000, 0x1000, 0x77d3f2e6 )
  1245.  
  1246.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1247.     ROM_LOAD( "mta5a.bin",    0x6800, 0x0800, 0xdbe4ec02 )
  1248.     ROM_LOAD( "mta6a.bin",    0x7000, 0x0800, 0xc00f0c05 )
  1249.     ROM_LOAD( "mta7a.bin",    0x7800, 0x0800, 0xf3f16ca7 )
  1250.     ROM_RELOAD(               0xf800, 0x0800 )
  1251.  
  1252.     ROM_REGION( 0x10000, REGION_CPU3 ) /* 64k for digital sound processor */
  1253.     ROM_LOAD( "mta2a.bin", 0x0000,0x1000,0x13db8ed3 )
  1254.     ROM_LOAD( "mta3a.bin", 0x1000,0x1000,0x31bdfe5c )
  1255.     ROM_LOAD( "mta4a.bin", 0x2000,0x1000,0x1502d0e8 )
  1256.     ROM_LOAD( "mta1a.bin", 0x3000,0x1000,0x658482a6 )
  1257.  
  1258.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1259.     ROM_LOAD( "mtl11d.bin",   0x0000, 0x0800, 0xc6e4d339 )
  1260. ROM_END
  1261.  
  1262. ROM_START( venture )
  1263.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1264.     ROM_LOAD( "13a-cpu",      0x8000, 0x1000, 0xf4e4d991 )
  1265.     ROM_LOAD( "12a-cpu",      0x9000, 0x1000, 0xc6d8cb04 )
  1266.     ROM_LOAD( "11a-cpu",      0xa000, 0x1000, 0x3bdb01f4 )
  1267.     ROM_LOAD( "10a-cpu",      0xb000, 0x1000, 0x0da769e9 )
  1268.     ROM_LOAD( "9a-cpu",       0xc000, 0x1000, 0x0ae05855 )
  1269.     ROM_LOAD( "8a-cpu",       0xd000, 0x1000, 0x4ae59676 )
  1270.     ROM_LOAD( "7a-cpu",       0xe000, 0x1000, 0x48d66220 )
  1271.     ROM_LOAD( "6a-cpu",       0xf000, 0x1000, 0x7b78cf49 )
  1272.  
  1273.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1274.     ROM_LOAD( "3a-ac",        0x5800, 0x0800, 0x4ea1c3d9 )
  1275.     ROM_LOAD( "4a-ac",        0x6000, 0x0800, 0x5154c39e )
  1276.     ROM_LOAD( "5a-ac",        0x6800, 0x0800, 0x1e1e3916 )
  1277.     ROM_LOAD( "6a-ac",        0x7000, 0x0800, 0x80f3357a )
  1278.     ROM_LOAD( "7a-ac",        0x7800, 0x0800, 0x466addc7 )
  1279.     ROM_RELOAD(               0xf800, 0x0800 )
  1280.  
  1281.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1282.     ROM_LOAD( "11d-cpu",      0x0000, 0x0800, 0xb4bb2503 )
  1283. ROM_END
  1284.  
  1285. ROM_START( venture2 )
  1286.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1287.     ROM_LOAD( "vent_a13.cpu", 0x8000, 0x1000, 0x4c833f99 )
  1288.     ROM_LOAD( "vent_a12.cpu", 0x9000, 0x1000, 0x8163cefc )
  1289.     ROM_LOAD( "vent_a11.cpu", 0xa000, 0x1000, 0x324a5054 )
  1290.     ROM_LOAD( "vent_a10.cpu", 0xb000, 0x1000, 0x24358203 )
  1291.     ROM_LOAD( "vent_a9.cpu",  0xc000, 0x1000, 0x04428165 )
  1292.     ROM_LOAD( "vent_a8.cpu",  0xd000, 0x1000, 0x4c1a702a )
  1293.     ROM_LOAD( "vent_a7.cpu",  0xe000, 0x1000, 0x1aab27c2 )
  1294.     ROM_LOAD( "vent_a6.cpu",  0xf000, 0x1000, 0x767bdd71 )
  1295.  
  1296.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1297.     ROM_LOAD( "3a-ac",        0x5800, 0x0800, 0x4ea1c3d9 )
  1298.     ROM_LOAD( "4a-ac",        0x6000, 0x0800, 0x5154c39e )
  1299.     ROM_LOAD( "5a-ac",        0x6800, 0x0800, 0x1e1e3916 )
  1300.     ROM_LOAD( "6a-ac",        0x7000, 0x0800, 0x80f3357a )
  1301.     ROM_LOAD( "7a-ac",        0x7800, 0x0800, 0x466addc7 )
  1302.     ROM_RELOAD(               0xf800, 0x0800 )
  1303.  
  1304.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1305.     ROM_LOAD( "11d-cpu",      0x0000, 0x0800, 0xb4bb2503 )
  1306. ROM_END
  1307.  
  1308. ROM_START( venture4 )
  1309.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1310.     ROM_LOAD( "vel13a-4",     0x8000, 0x1000, 0x1c5448f9 )
  1311.     ROM_LOAD( "vel12a-4",     0x9000, 0x1000, 0xe62491cc )
  1312.     ROM_LOAD( "vel11a-4",     0xa000, 0x1000, 0xe91faeaf )
  1313.     ROM_LOAD( "vel10a-4",     0xb000, 0x1000, 0xda3a2991 )
  1314.     ROM_LOAD( "vel9a-4",      0xc000, 0x1000, 0xd1887b11 )
  1315.     ROM_LOAD( "vel8a-4",      0xd000, 0x1000, 0x8e8153fc )
  1316.     ROM_LOAD( "vel7a-4",      0xe000, 0x1000, 0x0a091701 )
  1317.     ROM_LOAD( "vel6a-4",      0xf000, 0x1000, 0x7b165f67 )
  1318.  
  1319.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1320.     ROM_LOAD( "vea3a-2",      0x5800, 0x0800, 0x83b8836f )
  1321.     ROM_LOAD( "4a-ac",        0x6000, 0x0800, 0x5154c39e )
  1322.     ROM_LOAD( "5a-ac",        0x6800, 0x0800, 0x1e1e3916 )
  1323.     ROM_LOAD( "6a-ac",        0x7000, 0x0800, 0x80f3357a )
  1324.     ROM_LOAD( "7a-ac",        0x7800, 0x0800, 0x466addc7 )
  1325.     ROM_RELOAD(               0xf800, 0x0800 )
  1326.  
  1327.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1328.     ROM_LOAD( "vel11d-2",     0x0000, 0x0800, 0xea6fd981 )
  1329. ROM_END
  1330.  
  1331. ROM_START( pepper2 )
  1332.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1333.     ROM_LOAD( "main_12a",     0x9000, 0x1000, 0x33db4737 )
  1334.     ROM_LOAD( "main_11a",     0xa000, 0x1000, 0xa1f43b1f )
  1335.     ROM_LOAD( "main_10a",     0xb000, 0x1000, 0x4d7d7786 )
  1336.     ROM_LOAD( "main_9a",      0xc000, 0x1000, 0xb3362298 )
  1337.     ROM_LOAD( "main_8a",      0xd000, 0x1000, 0x64d106ed )
  1338.     ROM_LOAD( "main_7a",      0xe000, 0x1000, 0xb1c6f07c )
  1339.     ROM_LOAD( "main_6a",      0xf000, 0x1000, 0x515b1046 )
  1340.  
  1341.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1342.     ROM_LOAD( "audio_5a",     0x6800, 0x0800, 0x90e3c781 )
  1343.     ROM_LOAD( "audio_6a",     0x7000, 0x0800, 0xdd343e34 )
  1344.     ROM_LOAD( "audio_7a",     0x7800, 0x0800, 0xe02b4356 )
  1345.     ROM_RELOAD(               0xf800, 0x0800 )
  1346.  
  1347.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1348.     ROM_LOAD( "main_11d",     0x0000, 0x0800, 0xb25160cd )
  1349. ROM_END
  1350.  
  1351. ROM_START( hardhat )
  1352.     ROM_REGION( 0x10000, REGION_CPU1 ) /* 64k for code */
  1353.     ROM_LOAD( "hhl-2.11a",    0xa000, 0x1000, 0x7623deea )
  1354.     ROM_LOAD( "hhl-2.10a",    0xb000, 0x1000, 0xe6bf2fb1 )
  1355.     ROM_LOAD( "hhl-2.9a",     0xc000, 0x1000, 0xacc2bce5 )
  1356.     ROM_LOAD( "hhl-2.8a",     0xd000, 0x1000, 0x23c7a2f8 )
  1357.     ROM_LOAD( "hhl-2.7a",     0xe000, 0x1000, 0x6f7ce1c2 )
  1358.     ROM_LOAD( "hhl-2.6a",     0xf000, 0x1000, 0x2a20cf10 )
  1359.  
  1360.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1361.     ROM_LOAD( "hha-1.5a",     0x6800, 0x0800, 0x16a5a183 )
  1362.     ROM_LOAD( "hha-1.6a",     0x7000, 0x0800, 0xbde64021 )
  1363.     ROM_LOAD( "hha-1.7a",     0x7800, 0x0800, 0x505ee5d3 )
  1364.     ROM_RELOAD(               0xf800, 0x0800 )
  1365.  
  1366.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1367.     ROM_LOAD( "hhl-1.11d",    0x0000, 0x0800, 0xdbcdf353 )
  1368. ROM_END
  1369.  
  1370. ROM_START( fax )
  1371.     ROM_REGION( 0x40000, REGION_CPU1 ) /* 64k for code + 192k for extra memory */
  1372.     ROM_LOAD( "fxl8-13a.32",  0x8000, 0x1000, 0x8e30bf6b )
  1373.     ROM_LOAD( "fxl8-12a.32",  0x9000, 0x1000, 0x60a41ff1 )
  1374.     ROM_LOAD( "fxl8-11a.32",  0xA000, 0x1000, 0x2c9cee8a )
  1375.     ROM_LOAD( "fxl8-10a.32",  0xB000, 0x1000, 0x9b03938f )
  1376.     ROM_LOAD( "fxl8-9a.32",   0xC000, 0x1000, 0xfb869f62 )
  1377.     ROM_LOAD( "fxl8-8a.32",   0xD000, 0x1000, 0xdb3470bc )
  1378.     ROM_LOAD( "fxl8-7a.32",   0xE000, 0x1000, 0x1471fef5 )
  1379.     ROM_LOAD( "fxl8-6a.32",   0xF000, 0x1000, 0x812e39f3 )
  1380.     /* Banks of question ROMs */
  1381.     ROM_LOAD( "fxd-1c.64",          0x10000, 0x2000, 0xfd7e3137 )
  1382.     ROM_LOAD( "fxd-2c.64",          0x12000, 0x2000, 0xe78cb16f )
  1383.     ROM_LOAD( "fxd-3c.64",          0x14000, 0x2000, 0x57a94c6f )
  1384.     ROM_LOAD( "fxd-4c.64",          0x16000, 0x2000, 0x9036c5a2 )
  1385.     ROM_LOAD( "fxd-5c.64",          0x18000, 0x2000, 0x38c03405 )
  1386.     ROM_LOAD( "fxd-6c.64",          0x1A000, 0x2000, 0xf48fc308 )
  1387.     ROM_LOAD( "fxd-7c.64",          0x1C000, 0x2000, 0xcf93b924 )
  1388.     ROM_LOAD( "fxd-8c.64",          0x1E000, 0x2000, 0x607b48da )
  1389.     ROM_LOAD( "fxd-1b.64",          0x20000, 0x2000, 0x62872d4f )
  1390.     ROM_LOAD( "fxd-2b.64",          0x22000, 0x2000, 0x625778d0 )
  1391.     ROM_LOAD( "fxd-3b.64",          0x24000, 0x2000, 0xc3473dee )
  1392.     ROM_LOAD( "fxd-4b.64",          0x26000, 0x2000, 0xe39a15f5 )
  1393.     ROM_LOAD( "fxd-5b.64",          0x28000, 0x2000, 0x101a9d70 )
  1394.     ROM_LOAD( "fxd-6b.64",          0x2A000, 0x2000, 0x374a8f05 )
  1395.     ROM_LOAD( "fxd-7b.64",          0x2C000, 0x2000, 0xf7e7f824 )
  1396.     ROM_LOAD( "fxd-8b.64",          0x2E000, 0x2000, 0x8f1a5287 )
  1397.     ROM_LOAD( "fxd-1a.64",          0x30000, 0x2000, 0xfc5e6344 )
  1398.     ROM_LOAD( "fxd-2a.64",          0x32000, 0x2000, 0x43cf60b3 )
  1399.     ROM_LOAD( "fxd-3a.64",          0x34000, 0x2000, 0x6b7d29cb )
  1400.     ROM_LOAD( "fxd-4a.64",          0x36000, 0x2000, 0xb9de3c2d )
  1401.     ROM_LOAD( "fxd-5a.64",          0x38000, 0x2000, 0x67285bc6 )
  1402.     ROM_LOAD( "fxd-6a.64",          0x3A000, 0x2000, 0xba67b7b2 )
  1403.     /* The last two ROM sockets were apparently never populated */
  1404. //    ROM_LOAD( "fxd-7a.64",          0x3C000, 0x2000, 0x00000000 )
  1405. //    ROM_LOAD( "fxd-8a.64",          0x3E000, 0x2000, 0x00000000 )
  1406.  
  1407.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for audio */
  1408.     ROM_LOAD( "fxa2-5a.16",   0x6800, 0x0800, 0x7c525aec )
  1409.     ROM_LOAD( "fxa2-6a.16",   0x7000, 0x0800, 0x2b3bfc44 )
  1410.     ROM_LOAD( "fxa2-7a.16",   0x7800, 0x0800, 0x578c62b7 )
  1411.     ROM_RELOAD(               0xf800, 0x0800 )
  1412.  
  1413.     ROM_REGION( 0x0800, REGION_GFX1 | REGIONFLAG_DISPOSE )
  1414.     ROM_LOAD( "fxl1-11d.32",  0x0000, 0x0800, 0x54fc873d )
  1415.     ROM_CONTINUE(             0x0000, 0x0800 )       /* overwrite with the real one - should be a 2716? */
  1416. ROM_END
  1417.  
  1418.  
  1419.  
  1420. GAME( 1979, sidetrac, 0,       targ,    sidetrac, sidetrac, ROT0, "Exidy", "Side Track" )
  1421. GAME( 1980, targ,     0,       targ,    targ,     targ,     ROT0, "Exidy", "Targ" )
  1422. GAME( 1980, spectar,  0,       targ,    spectar,  spectar,  ROT0, "Exidy", "Spectar (revision 3)" )
  1423. GAME( 1980, spectar1, spectar, targ,    spectar,  spectar,  ROT0, "Exidy", "Spectar (revision 1?)" )
  1424. GAMEX(1981, mtrap,    0,       mtrap,   mtrap,    mtrap,    ROT0, "Exidy", "Mouse Trap (version 5)", GAME_IMPERFECT_SOUND )
  1425. GAMEX(1981, mtrap3,   mtrap,   mtrap,   mtrap,    mtrap,    ROT0, "Exidy", "Mouse Trap (version 3)", GAME_IMPERFECT_SOUND )
  1426. GAMEX(1981, mtrap4,   mtrap,   mtrap,   mtrap,    mtrap,    ROT0, "Exidy", "Mouse Trap (version 4)", GAME_IMPERFECT_SOUND )
  1427. GAMEX(1981, venture,  0,       venture, venture,  venture,  ROT0, "Exidy", "Venture (version 5 set 1)", GAME_IMPERFECT_SOUND )
  1428. GAMEX(1981, venture2, venture, venture, venture,  venture,  ROT0, "Exidy", "Venture (version 5 set 2)", GAME_IMPERFECT_SOUND )
  1429. GAMEX(1981, venture4, venture, venture, venture,  venture,  ROT0, "Exidy", "Venture (version 4)", GAME_IMPERFECT_SOUND )
  1430. GAMEX(1982, pepper2,  0,       pepper2, pepper2,  pepper2,  ROT0, "Exidy", "Pepper II", GAME_IMPERFECT_SOUND )
  1431. GAMEX(1982, hardhat,  0,       pepper2, pepper2,  pepper2,  ROT0, "Exidy", "Hard Hat", GAME_IMPERFECT_SOUND )
  1432. GAMEX(1983, fax,      0,       fax,     fax,      fax,      ROT0, "Exidy", "Fax", GAME_IMPERFECT_SOUND )
  1433.